package cn.tedu;

public class Day18Test {
    public static void main(String[] args) {
        My1Thread t=new My1Thread();
        My1Thread t1=new My1Thread();
        My1Thread t2=new My1Thread();
        My1Thread t3=new My1Thread();
        t.setName("谢");
        t1.setName("郜");
        t2.setName("晨");
        t3.setName("晨晨");
        t.start();
        t1.start();
        t2.start();
        t3.start();
    }
}
class My1Thread extends  Thread {

    static int a = 100;


    @Override
    //给方法上锁:会自动分配锁对象
    //给 普通方法 分配的锁对象是  this
    //给 静态方法 分配的锁对象是  类名.class
    //synchronized  public void run() {//默认的锁对象时this
    //在此处失效,不能加static 加了方法重写格式就错误了
     public void run() {
        while (true) {
            //在代码块上加锁---
            //如果锁的是 普通资源  锁对象可以任意,但是,必须是同一个锁对象
            //如果锁的是 静态资源  锁对象必须是固定的  类名.class
            //synchronized(this){
            synchronized(My1Thread.class){
                if (a > 0) {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(super.getName() + "~~~~" + a);
                } else {
                    break;
                }
                a--;
           }
        }
    }
}